from django.test import TestCase

# Create your tests here.
from loguru import logger
'''
#基础用法，不同日志级别
logger.debug("这是一个调试消息")
logger.info("这是一个信息消息")
logger.success("这是一个成功消息")
logger.warning("这是一个警告消息")
logger.error("这是一个错误消息")
logger.critical("这是一个关键错误消息")

#日志输出到文件
logger.add("file.log", rotation="500 MB")  # 文件大小达到500MB时轮转
logger.info("这条消息将会记录到文件中")

#日志格式化
logger.add("../file.log", format="{time} {level} {message}", rotation="500 MB")
logger.info("这是一条格式化的日志消息")

#自定义格式
complex_format = (
    "<green>{time:YYYY-MM-DD HH:mm:ss}</green> | "
    "<level>{level: <8}</level> | "
    "<cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> - "
    "<level>{message}</level>"
)
logger.add("detailed.log", format=complex_format)
logger.info("这是一条自定义的日志消息")

#日志过滤
# 过滤某个级别的日志
logger.add("file.log", filter=lambda record: record["level"].name == "INFO")
logger.debug("这条消息不会被记录")
logger.info("这条消息会被记录")
logger.warning("这条消息也不会被记录")

# 使用自定义过滤器
def my_filter(record):
    return record["level"].name == "ERROR" or "重要" in record["message"]

logger.add("important.log", filter=my_filter)
logger.info("普通信息")  # 不会被记录
logger.info("重要通知")  # 会被记录
logger.error("错误信息")  # 会被记录

#异步日志记录
import asyncio

logger.add("async_file.log", enqueue=True)

async def main():
    logger.info("这是一个异步日志消息")
    await asyncio.sleep(1)

asyncio.run(main())

#异常捕获和追踪
# 使用装饰器记录函数异常
@logger.catch
def some_function(x, y):
    return x / y
'''
# 使用上下文管理器捕获异常
logger.add("testexception.log")

def process_data():
    try:
        # with logger.catch():
        result = 1 / 0
    except:
        logger.exception('Exception')

# some_function(1, 0)
process_data()
'''
#上下文信息
logger.add("app.log", format="{time} | {extra[ip]} | {message}")

with logger.contextualize(ip="192.168.1.1"):
    logger.info("用户登录")
    logger.warning("登录尝试次数过多")

#条件性日志
import time,sys  # 用于模拟昂贵的操作

# 定义一个昂贵的操作函数
def expensive_operation(item):
    time.sleep(2)  # 模拟一个耗时的操作
    return f"处理结果: {item * 2}"  # 假设这个函数对item进行了某种处理

# 处理项目的函数
def process_item(item):
    # 使用lazy=True来延迟执行expensive_operation，直到确定需要记录调试信息
    logger.opt(lazy=True).debug("处理项目: {}", lambda: expensive_operation(item))

# 示例用法
if __name__ == "__main__":
    # 设置日志级别为DEBUG，以便看到调试信息
    logger.remove()  # 首先移除默认配置（可选）
    logger.add(sys.stderr, level="DEBUG")  # 将日志输出到标准错误（可选）

    # 处理一个项目
    process_item(5)

#临时修改日志级别
with logger.catch(level="ERROR"):
    logger.info("这条不会被记录")
    logger.error("这条会被记录")

'''